perm filename CRES.SAI[CRE,BGB] blob sn#106827 filedate 1974-06-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "CRESAI"
C00004 00003	REAL SUBR XPP (INTEGER V)
C00005 00004	INTEGER SUBR CW (INTEGER X)START_CODE HLRZ 1,@XEND
C00007 00005	REAL XSUBR ATAN2(REAL Y,X)REAL XSUBR SQRT(REAL X)
C00008 00006	SUBR ALLIGN(ITG P1,P2)
C00010 00007	SUBR DPYMATES (ITG IMG)
C00011 00008	α MAIN EXECUTION
C00012 ENDMK
C⊗;
BEGIN "CRESAI"
	REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;

	REQUIRE "CRE" 	 LOAD_MODULE;
	REQUIRE "MKCON"  LOAD_MODULE;
	REQUIRE "CMPARE" LOAD_MODULE;
	REQUIRE "CREMEM" LOAD_MODULE;
	REQUIRE "CREIO"  LOAD_MODULE;
	REQUIRE "CREDPY" LOAD_MODULE;

	EXTERNAL INTEGER FILM;
	EXTERNAL SUBR CRE;

α DISPLAY ROUTINES;
	EXTERNAL SAFE INTEGER ARRAY DPYBUF[0:1];
	XSUBR DPYBIG (INTEGER I);
	XSUBR DPYBRT (INTEGER I);
	XSUBR AIVECT (INTEGER X,Y);
	XSUBR AVECT  (INTEGER X,Y);
	XSUBR DPYSET (INTEGER ARRAY BUF);
	XSUBR DPYOUT (INTEGER I);
	XSUBR DPYSST (STRING STR);
	XSUBR PLOTO (STRING STR);
	XSUBR DPYGON(INTEGER I);

	XSUBR CROP;
	XSUBR DPYIMG;

α INPUT/OUTPUT ROUTINES;
	XSUBR CREIN(STRING S);XSUBR CREOUT(STRING S);
	XSUBR TVDSKI(STRING S);XSUBR TVDSKO(STRING S);

α COMPARE ROUTINES;
	XSUBR MKLINT(INTEGER PGN);
REAL SUBR XPP (INTEGER V);
START_CODE MOVE 1,V;HRRZ 1,3(1);FSC 1,'225;FSBR 1,[144.0];END;

REAL SUBR YPP (INTEGER V);
START_CODE MOVE 1,V;HLRZ 1,3(1);FSC 1,'225;FSBR 1,[108.0];MOVNS 1;END;

	DEFINE FIX="'247000000000";

REAL SUBR XPP_(REAL X;INTEGER V);
START_CODE MOVE X;FADR[144.0];FIX '225000;MOVE 1,V;HRRM 3(1);END;

REAL SUBR YPP_(REAL Y;INTEGER V);
START_CODE MOVN Y;FADR[108.0];FIX '225000;MOVE 1,V;HRLM 3(1);END;

	INTEGER SUBR XWD(INTEGER X,Y);START_CODE MOVE 1,Y;HRL 1,X;END;
	INTEGER SUBR DIP(INTEGER X,Y);START_CODE MOVE 1,X;HRLM 1,Y;END;
	INTEGER SUBR DAP(INTEGER X,Y);START_CODE MOVE 1,X;HRRM 1,Y;END;

INTEGER SUBR CW (INTEGER X);START_CODE HLRZ 1,@X;END;
INTEGER SUBR CCW(INTEGER X);START_CODE HRRZ 1,@X;END;

INTEGER SUBR DAD(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,1(1);END;
INTEGER SUBR SON(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,1(1);END;

INTEGER SUBR TYPE(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,2(1);END;
INTEGER SUBR RELOC(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,2(1);END;

INTEGER SUBR ENDO(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,3(1);END;
INTEGER SUBR EXO (INTEGER X);START_CODE MOVE 1,X;HRRZ 1,3(1);END;

INTEGER SUBR ALT (INTEGER X);START_CODE MOVE 1,X;HLRZ 1,4(1);END;
INTEGER SUBR NCNT(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,4(1);END;

INTEGER SUBR NGON(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,5(1);END;
INTEGER SUBR PGON(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,5(1);END;

INTEGER SUBR NTIME(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,6(1);END;
INTEGER SUBR PTIME(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,6(1);END;

INTEGER SUBR NLINK(INTEGER X);START_CODE MOVE 1,X;HLRZ 1,7(1);END;
INTEGER SUBR PLINK(INTEGER X);START_CODE MOVE 1,X;HRRZ 1,7(1);END;
REAL XSUBR ATAN2(REAL Y,X);REAL XSUBR SQRT(REAL X);
REAL XSUBR SIN(REAL X);REAL XSUBR COS(REAL X);

REAL SUBR PXY(INTEGER X);START_CODE MOVE 1,X;HLLE 1,4(1);END;
REAL SUBR MXX(INTEGER X);START_CODE MOVE 1,X;HLLE 1,6(1);END;
REAL SUBR MYY(INTEGER X);START_CODE MOVE 1,X;HRLE 1,6(1);END;
REAL SUBR MZZ(INTEGER X);START_CODE MOVE 1,X;HRLE 1,4(1);END;
REAL SUBR AREA(INTEGER X);START_CODE MOVE 1,X;HRLE 1,1(1);END;
REAL SUBR PERM(INTEGER X);START_CODE MOVE 1,X;HLLE 1,1(1);END;

REAL SUBR PANG(INTEGER X);RETURN(0.5*ATAN2(2*PXY(X),MYY(X)-MXX(X)));
SUBR ALLIGN(ITG P1,P2);
BEGIN "ALLIGN"
	INTEGER S1,S2,V,V0;
	REAL C,S,SCALE,PHI;
	REAL XCM1,YCM1,XCM2,YCM2;

	DPYSET(DPYBUF);DPYGON(P1);DPYGON(P2);DPYOUT(0);

	MKLINT(P1);MKLINT(P2);
	S1←ALT(P1);S2←ALT(P2);

	PHI ← PANG(S2) - PANG(S1);
	C ← COS(PHI); S ← SIN(PHI);
	XCM1 ← XPP(S1); YCM1 ← YPP(S1);
	XCM2 ← XPP(S2); YCM2 ← YPP(S2);
	SCALE ← AREA(S2)/AREA(S1);

	V ← V0 ← SON(P1);
	DO BEGIN REAL X,Y;
		X ← (XPP(V) - XCM1)*SCALE;
		Y ← (YPP(V) - YCM1)*SCALE;
		XPP_(C*X-S*Y+XCM2,V);
		YPP_(S*X+C*Y+YCM2,V);
	END UNTIL V0 = (V←CCW(V));

	DPYSET(DPYBUF);DPYGON(P1);DPYGON(P2);DPYOUT(1);
		
END "ALLIGN";
SUBR DPYMATES (ITG IMG);
BEGIN "DPYMATES"
	ITG LVL0,LVL,PGN0,PGN,V0,V,U;
	DPYSET(DPYBUF);
		LVL0 ← SON(IMG);
		LVL ← CCW(LVL0);
	DO BEGIN
		PGN0 ← PGN ← SON(LVL);LVL←CCW(LVL);
	DO BEGIN
		V0 ← V ← SON(PGN);PGN←CCW(PGN);
		AIVECT(3.5*XPP(V),3.5*YPP(V));
	DO BEGIN
		V ← CCW(V);
		AVECT(3.5*XPP(V),3.5*YPP(V));
	END UNTIL V=V0;
	END UNTIL PGN=PGN0;
	END UNTIL LVL=LVL0;

	DPYOUT(1);
END "DPYMATES";
α MAIN EXECUTION;
BEGIN "MAIN"
	ITG IMG,LVL,PGN;
	ITG P1,P2,I1,I2;

	CROP;CREIN("TMP");

	I1 ← SON(FILM);
	I2 ← CCW(I1);

	P1 ← SON(CCW(SON(I1)));
	P2 ← SON(CCW(SON(I2)));

	ALLIGN(P1,P2);
	INCHRW;
	CRE;
END "MAIN";
END "CRESAI";